
public class InvokeRun extends Thread {
    private int i;

    /**
     * 重写run()方法，线程执行体
     */
    @Override
    public void run() {
        for (; i < 100; i++) {
            /*
             * 直接调用run()方法时，Thread的this.getName()返回的是该对象的名字
             * 而不是当前线程的名字
             * 使用Thread.currentThread().getName()总是获取当前线程的名字
             */
            System.out.println(Thread.currentThread().getName() + " " + i);
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + " " + i);
            if (i == 20) {
                // 下面并不会启动2个线程，而是依次执行2个run()方法
                new InvokeRun().run();
                new InvokeRun().run();
            }
        }
    }
}
